package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IGysGroupDAO;
import org.jsola.hr.dto.GysGroupAddDTO;
import org.jsola.hr.dto.GysGroupUpdateDTO;
import org.jsola.hr.entity.GysGroupDO;
import org.jsola.hr.query.GysGroupQuery;
import org.jsola.hr.vo.GysGroupListVO;
import org.jsola.hr.vo.GysGroupVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 甲方端供应商分组
 *
 * @author zhr
 */
public interface IGysGroupService extends IService<IGysGroupDAO, GysGroupDO> {

    /**
     * 新增甲方端供应商分组
     *
     * @param gysGroupAddDTO 新增甲方端供应商分组DTO
     * @param tokenUser      当前用户
     * @return 甲方端供应商分组详情信息
     */
    GysGroupVO save(GysGroupAddDTO gysGroupAddDTO, TokenUser tokenUser);

    /**
     * 修改甲方端供应商分组
     *
     * @param gysGroupUpdateDTO 修改甲方端供应商分组DTO
     * @param tokenUser         当前用户
     * @return 更新数量
     */
    int update(GysGroupUpdateDTO gysGroupUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除甲方端供应商分组，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser   当前用户
     * @param gysGroupIds 甲方端供应商分组id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... gysGroupIds);

    /**
     * 根据甲方端供应商分组id查找
     *
     * @param gysGroupId 甲方端供应商分组id
     * @param siteId     所属站点id
     * @return 甲方端供应商分组详情信息
     */
    GysGroupVO selectById(String gysGroupId, String siteId);

    /**
     * 查询甲方端供应商分组
     *
     * @param gysGroupQuery 查询条件
     * @param siteId        所属站点id
     * @return 甲方端供应商分组列表信息
     */
    List<GysGroupListVO> select(GysGroupQuery gysGroupQuery, String siteId);

    /**
     * 查询甲方端供应商分组记录数
     *
     * @param gysGroupQuery 查询条件
     * @param siteId        所属站点id
     * @return 甲方端供应商分组记录数
     */
    int selectCount(GysGroupQuery gysGroupQuery, String siteId);

    /**
     * 分页查询甲方端供应商分组
     *
     * @param gysGroupQuery 查询条件
     * @param siteId        所属站点id
     * @return 甲方端供应商分组列表信息
     */
    Page<GysGroupListVO> selectPage(GysGroupQuery gysGroupQuery, String siteId);


    /**
     * 根据甲方端供应商分组id查找
     *
     * @param gysGroupId 甲方端供应商分组id
     * @param siteId     所属站点id
     * @return 甲方端供应商分组
     */
    GysGroupDO selectDOById(String gysGroupId, String siteId);

    /**
     * 查询甲方端供应商分组
     *
     * @param gysGroupQuery 查询条件
     * @param siteId        所属站点id
     * @return 甲方端供应商分组列表
     */
    List<GysGroupDO> selectDO(GysGroupQuery gysGroupQuery, String siteId);

    /**
     * 根据分组类型查询对应租户下供应商分组
     *
     * @param groupType 分组类型
     * @param siteId    站点
     * @return 供应商分组
     */
    List<GysGroupVO> selectGroupByType(String groupType, String siteId);

    /**
     * 查询供应商分组树
     *
     * @param gysGroupQuery 查询条件
     * @param tokenUser     当前用户
     * @return 供应商分组树
     */
    List<GysGroupVO> selectGroupTree(GysGroupQuery gysGroupQuery, TokenUser tokenUser);

    /**
     * 根据父级Id列表查询他们所有子分组的Id
     *
     * @param parentIdList 父级Id列表
     * @param siteId       站点
     * @return 所有子分组Id
     */
    List<String> selectByParentIdList(List<String> parentIdList, String siteId);

    /**
     * 根据名称查询供应商分组
     *
     * @param groupName 名称
     * @param siteId    站点
     * @return 分组
     */
    List<GysGroupDO> selectGroupByName(String groupName, String siteId);
}


